package main

import "fmt"

// 类型断言

func assign(i interface{}) {
	fmt.Printf("%T\n", i)

	// 类型断言
	str, ok := i.(string)
	if !ok {
		fmt.Println("传入的参数不是一个字符串")
	} else {
		fmt.Println("传入的参数为字符串", str)
	}
}

func assign2(i interface{}) {
	fmt.Printf("%T\n", i)

	// 类型断言
	switch i := i.(type) {
	case string:
		fmt.Printf("传入的参数为 %T 字符串: %#v\n", i, i)
	case int:
		fmt.Printf("传入的参数为 %T 整数: %#v\n", i, i)
	default:
		fmt.Printf("传入的参数为 %T 类型: %#v\n", i, i)
	}
}

func main() {
	assign(100)

	fmt.Println("=========================================================")

	assign2(100)

	fmt.Println("=========================================================")

	assign2(struct {
		Name string
		Age  int
	}{"张三", 20})
}
